[アップデート] ECR プライベートレジストリのポリシースコープが更新され、複数のリポジトリポリシーを管理しなくてもよくなりました
いわさです。
今朝のアップデートで ECR のレジストリポリシーにポリシースコープの概念が追加され、新しいポリシースコープ V2 というものが使えるようになりました。
何が出来るようになったのかと、移行方法を紹介します。
用語の整理:レジストリとリポジトリ、ポリシー
まず、ECR にはレジストリとリポジトリの概念があり、混乱しがちなので整理しておきます。
レジストリは各 AWS アカウントに提供されるコンポーネントで、その中に 1 つ以上のリポジトリを作成できます。
リポジトリは Docker イメージ、OCI 互換イメージを保存出来るコレクションです。単一の ECR レジストリの中で複数のリポジトリを使用してコンテナイメージを整理出来ます。
このレジストリとリポジトリですが、どちらもリソースベースポリシーを設定することが出来ます。レジストリポリシーの場合は全てのリポジトリに自動適用されます。一方でリポジトリポリシーの場合は個別に設定が必要です。
このポリシーですが、クロスアカウントアクセスのシーンでよく設定が必要になります。
例えば次のようなことを行いたい場合は、リポジトリポリシーの追加が必要でした。
これまでのレジストリポリシー
上記がなぜレジストリポリシーではなくリポジトリポリシーなのかというと、これまでのレジストリポリシーでは以下のアクションのみ許可出来るという制約がありました。
- ecr:ReplicateImage
- ecr:BatchImportUpstreamImage
- ecr:CreateRepository
実際に上記以外のアクションを設定してみると次のようなエラーが発生します。
そのため、これまでは特定のケースでは個別のリポジトリごとに追加設定が必要でした。
レジストリポリシーで全ての ECR アクションが設定出来るようになった
今回のアップデートで、このレジストリポリシーで上記以外の全ての ECR アクションが設定出来るようになりました。これによって個別にリポジトリポリシーの管理の手間がなくなります。
レジストリポリシーではリソース指定も出来るので、一元的にレジストリポリシーで管理することも出来るようになります。
この新しい機能を使うためにはレジストリのポリシースコープというものを V1 から V2 に更新してやる必要があります。
現在のポリシーの確認方法
新規のアカウントや初めて ECR レジストリポリシーを操作する環境の場合は既に V2 になっている場合があります。
確認方法ですが、次のようにプライベートレジストリの [Features & Settings] -> [Permissions] で「New registori policy scope available」のバナーが表示される場合はお使いの環境は V1 です。
あるいは、AWS CLI で確認も可能です。
% aws ecr get-account-setting --name REGISTRY_POLICY_SCOPE --profile hogeadmin
{
"name": "REGISTRY_POLICY_SCOPE",
"value": "V1"
}
V1 ポリシーの廃止は本日時点でアナウンスされていないので、このまま V1 を使うことも可能ですが、今回のアップデートで出来なくなったり既存環境に影響を受ける要素はないので、基本的には V2 に移行して良いです。
ポリシーを更新する
移行方法は非常に簡単でバナーの Enable ボタンを押せばすぐに更新されます。
あるいは AWS CLI から更新も可能です。(推奨はされていませんが、逆に V2 から V1 への更新も可能)
% aws ecr put-account-setting --name REGISTRY_POLICY_SCOPE --value V2 --profile hogeadmin
{
"name": "REGISTRY_POLICY_SCOPE",
"value": "V2"
}
更新後は次のように先ほどはエラーとなっていた(V1 で使えなかったアクションを含む)ポリシーの作成が可能になっています。
さいごに
本日は ECR プライベートレジストリのポリシースコープが更新され、複数のリポジトリポリシーを管理しなくてもよくなったので実際に更新してみました。
更新の副作用もないので基本的に V2 に移行して良いのではないでしょうか。